package com.study.readerwriter;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

import org.junit.Test;

/**
* @Name: FileCopyDemo
* @Description: 案例：利用字符流实现文件拷贝
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-1-15 下午9:02:16 
* @Version: V1.0
 */
public class FileCopyDemo {
	
	/**
	* @Name: fileCopy01
	* @Description: 使用字节-字符转换流实现文件拷贝功能（每次读取一个字符）
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-16 上午9:36:14
	* @Parameters: @throws IOException
	* @Return: void
	 */
	@Test
	public void fileCopy01() throws IOException {
		//创建文件字节输入流，并包装成字节-字符转换流对象
		InputStreamReader reader = new InputStreamReader(new FileInputStream("fos2.txt")) ;
		//创建文件字节输出流，并包装成字节-字符转换流对象
		OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("copy.txt")) ;
		//读取数据，每次读取一个字符
		int c = 0 ;
		while((c= reader.read()) != -1) {
			writer.write(c) ;
		}
		//释放资源
		reader.close() ;
		writer.close() ;
	}
	
	/**
	* @Name: fileCopy02
	* @Description: 使用字节-字符转换流实现文件拷贝功能（每次读取一个字符数组）
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-16 上午9:37:17
	* @Parameters: @throws IOException
	* @Return: void
	 */
	@Test
	public void fileCopy02() throws IOException {
		//创建文件字节输入流，并包装成字节-字符转换流对象
		InputStreamReader reader = new InputStreamReader(new FileInputStream("fos2.txt")) ;
		//创建文件字节输出流，并包装成字节-字符转换流对象
		OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("copy2.txt")) ;
		//读取数据，每次读取一个字符
		char[] cbuf = new char[1024] ;
		int len = 0 ;
		while((len= reader.read(cbuf)) != -1) {
			writer.write(cbuf, 0, len) ;
			writer.flush() ;
		}
		//释放资源
		reader.close() ;
		writer.close() ;
	}
	
	/**
	* @Name: fileCopy03
	* @Description: 使用文件字符流实现文件拷贝功能（每次读取一个字符）
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-15 下午9:02:59
	* @Parameters: 
	* @Return: void
	 */
	@Test
	public void fileCopy03() throws IOException {
		//创建文件字符读取流对象
		FileReader reader = new FileReader("fos2.txt") ;
		//创建文件字符写入流对象
		FileWriter writer = new FileWriter("copy.txt") ;
		int ch = 0 ;
		//读取文件中的内容：每次读取一个字符
		while((ch = reader.read()) != -1) {
			//将读取到的内容写入到新文件中
			writer.write(ch) ;
		}
		//释放资源
		reader.close() ;
		writer.close() ;
	}
	
	/**
	* @Name: fileCopy04
	* @Description: 使用文件字符流实现文件拷贝功能（每次读取一个字符数组）
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-15 下午9:02:59
	* @Parameters: 
	* @Return: void
	 */
	@Test
	public void fileCopy04() throws IOException {
		//创建文件字符读取流对象
		FileReader reader = new FileReader("fos2.txt") ;
		//创建文件字符写入流对象
		FileWriter writer = new FileWriter("copy2.txt") ;
		char[] cbuf = new char[1024] ;
		int len = 0 ;
		//读取文件中的内容：每次读取一个字符数组
		while((len = reader.read(cbuf)) != -1) {
			//将读取到的内容写入到新文件中
			writer.write(cbuf, 0, len) ;
			writer.flush() ;
		}
		//释放资源
		reader.close() ;
		writer.close() ;
	}
	
	/**
	* @Name: fileCopy05
	* @Description: 使用高效字符流实现文件拷贝功能（每次读取一个字符）
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-15 下午10:12:04
	* @Parameters: 
	* @Return: void
	 */
	@Test
	public void fileCopy05() throws IOException{
		//创建高效字符读取流
		BufferedReader reader = new BufferedReader(new FileReader("fos.txt")) ;
		//创建高效字符写入流
		BufferedWriter writer = new BufferedWriter(new FileWriter("copy.txt")) ;
		//读取数据，一次读取一个字符
		int ch = 0 ;
		while((ch = reader.read()) != -1) {
			//将读取到的数据写入到文件中
			writer.write(ch) ;
		}
		//释放资源
		reader.close() ;
		writer.close() ;
	}
	
	/**
	* @Name: fileCopy06
	* @Description: 使用高效字符流实现文件拷贝功能（每次读取一个字符数组）
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-15 下午10:12:04
	* @Parameters: 
	* @Return: void
	 */
	@Test
	public void fileCopy06() throws IOException {
		//创建高效字符读取流
		BufferedReader reader = new BufferedReader(new FileReader("fos.txt")) ;
		//创建高效字符写入流
		BufferedWriter writer = new BufferedWriter(new FileWriter("copy2.txt")) ;
		//读取数据，一次读取一个字符数据
		char[] cbuf = new char[1024] ;
		int len = 0 ;
		while((len = reader.read(cbuf)) != -1) {
			//将读取到的字符数组写入到文件中
			writer.write(cbuf, 0, len) ;
			writer.flush() ;
		}
		//释放资源
		writer.close() ;
		reader.close() ;
	}
	
	/**
	* @Name: fileCopy07
	* @Description: 使用高效字符流实现文件拷贝功能（每次读取一个文本行）
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-15 下午10:12:04
	* @Parameters: 
	* @Return: void
	 */
	@Test
	public void fileCopy07() throws IOException {
		//创建高效字符读取流
		BufferedReader reader = new BufferedReader(new FileReader("fos2.txt")) ;
		//创建高效字符写入流
		BufferedWriter writer = new BufferedWriter(new FileWriter("copy3.txt")) ;
		//读取数据，一次读取一个数据行
		String line = null ;
		while((line = reader.readLine()) != null) {
			//将读取到的数据行写入到文件中
			writer.write(line) ;
			writer.newLine() ;
			writer.flush() ;
		}
		//释放资源
		writer.close() ;
		reader.close() ;
	}
	

}
















